import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueDevTools(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  // IIS部署优化配置
  base: './', // 使用相对路径，适配IIS子目录
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    sourcemap: false, // 生产环境不生成sourcemap
    minify: 'esbuild', // 使用esbuild压缩，更快
    rollupOptions: {
      output: {
        // 优化代码分割策略，避免循环依赖
        // 使用函数形式的 manualChunks，让 Rollup 自动处理依赖关系
        manualChunks(id) {
          // node_modules 中的包
          if (id.includes('node_modules')) {
            // Element Plus 相关（包含图标）
            if (id.includes('element-plus')) {
              return 'element-plus'
            }
            // Vue 核心
            if (id.includes('vue')) {
              return 'vue-vendor'
            }
            // Axios
            if (id.includes('axios')) {
              return 'axios'
            }
            // 其他第三方库统一打包到 vendor
            return 'vendor'
          }
        },
        // 资源命名
        chunkFileNames: 'assets/js/[name]-[hash].js',
        entryFileNames: 'assets/js/[name]-[hash].js',
        assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
      },
    },
    // 块大小警告阈值
    chunkSizeWarningLimit: 1000,
  },
  server: {
    port: 5173,
    host: true,
    proxy: {
      '/api': {
        target: 'http://localhost:3001',
        changeOrigin: true,
      },
    },
  },
  preview: {
    port: 4173,
    host: true,
  },
})
